package br.com.ads.sgse.managedBean;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import br.com.ads.dao.DAO;
import br.com.ads.dao.JPAUtil;
import br.com.ads.sgse.entity.Professor;
import br.com.ads.sgse.entity.UnidadeFederacao;

//import br.com.ads.sgse.entity.UnidadeFederacao;

@ManagedBean(name = "professorBean")
@SessionScoped
public class ProfessorBean implements Serializable {

	private static final long serialVersionUID = 1L;

	private Professor professor = new Professor();
	private List<Professor> professores;
	private List<Professor> professorPesquisar;
	private DAO<Professor> dao = new DAO<Professor>(Professor.class);
	private String cpf;
	private Date dataNascimento;
	private String nomeCompleto;
	private EntityManager em = new JPAUtil().getEntityManager();
	private UnidadeFederacao unidadefederacao = new UnidadeFederacao();
	//private DateConverter dataConversao;
	private String parameter;

	public String getParameter() {
		return parameter;
	}

	public void setParameter(String parameter) {
		this.parameter = parameter;
	}

	/** ACTIONS **/

	
	@SuppressWarnings("unused")
	@PostConstruct
	private void init() {
		//dataConversao = new DateConverter();
		//getAllProfessores();
	}

	public String salvar() {
		try {
			//professor.setDataNascimento(dataConversao.converter());

			if (professor.getId() == null) {
				dao.adiciona(professor);
			} else {
				dao.atualiza(professor);
			}
			getAllProfessores();
			professor = new Professor();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public void remove() {
		try {
			dao.remove(professor);
			getAllProfessores();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void getAllProfessores() {
		try {
			professores = dao.listaTodos();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@SuppressWarnings("unchecked")
	public List<Professor> getProfessoresByNome() {
		Query q;
		professores = null;
		try {
			if (!nomeCompleto.equals("")) {
				q = em.createQuery("SELECT p FROM Professor p WHERE upper(p.nomeCompleto) like upper(:nomeCompleto)");
				q.setParameter("nomeCompleto", nomeCompleto + '%');
			}else {
				q = em.createQuery("SELECT p FROM Professor p WHERE p.cpf=:cpf");
				q.setParameter("cpf", cpf);
			}
			
			professores = q.getResultList();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return professorPesquisar;

	}

	/** getters and setters **/

	public Professor getProfessor() {
		return professor;
	}

	public void setProfessor(Professor professor) {
		this.professor = professor;
	}

	public List<Professor> getProfessores() {
		return professores;
	}

	public void setProfessores(List<Professor> professores) {
		this.professores = professores;
	}

	
	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public Date getDataNascimento() {
		return dataNascimento;
	}

	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	public String getNomeCompleto() {
		return nomeCompleto;
	}

	public void setNomeCompleto(String nomeCompleto) {
		this.nomeCompleto = nomeCompleto;
	}

	public UnidadeFederacao getUnidadefederacao() {
		return unidadefederacao;
	}

	public void setUnidadefederacao(UnidadeFederacao unidadefederacao) {
		this.unidadefederacao = unidadefederacao;
	}

	public List<Professor> getProfessorPesquisar() {
		return professorPesquisar;
	}

	public void setProfessorPesquisar(List<Professor> professorPesquisar) {
		this.professorPesquisar = professorPesquisar;
	}

}
